object ScalaVarDemo02 {
  def main(args: Array[String]): Unit = {
    // 类型推导，这个时候age是 Int类型
    var age = 18

    /**
     * 有两种方式我们可以age是Int类型
     * 1.Idea提示
     * 2.println(age.isInstance0f[Int])结果为true
     */
    // age = 2.1 编译器报错
    // age可以修改，因为age是var声明的
    age = 19
    var sal = 200
    // sal是val声明的，所以不可变
    //sal=10000 译器报错

    /**
     * *Scala设计者为什么设计 var 和 val 呢?
     * 1、在实际编程，我们更多的需求是获取/创建一个对象后，读取该对象的属性，或者是修
     *  改对象的属性值，但是我们很少去改变这个对象本身。
     * var dog = new Dog()
     * dog.age = 99
     * dog = new Dog()
     * 这事我们就可以val定义dog
     *val dog = new Dog()
     * dog.age = 99
     * 2、因为val 没有线程安全问题，因此效率高，scala的设计者推荐我们val
     *3、如果对象需要改变，则使用var
     */
    val  dog = new Dog()
    //0
    println(dog.age)
    println(dog.name)
    // 这里我们就不能有下面的操作了
    // dog = new Dog()
  }

  /**
   * 声明一个Dog类
   */
  class Dog(){
    //声明一个age属性，给了一个默认值_
    var age: Int=_
    var name: String = "小花"
  }

}
